package com.syedu.day12;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

/**
 * description：Java异常的处理方式
 * 1.消极处理, throws
 *      在出现异常的代码位置进行异常的抛出,通过throws来把异常定义到方法上,谁来调用这个方法谁就要处理这个异常,
 *      或者它也可以选择继续向上抛
 *      注意: 异常抛出的最高位置不能到main方法上,因为如果抛在main方法上面,一旦出错,无法挽回
 *           消极处理异常不是不处理,而是把处理异常的时机延后了
 * 2.积极处理,try catch
 *      捕获异常,从而在异常出现时可以指定不同的处理方式
 *      方式一: 分别使用try catch来捕获异常
 *      方式二: 一个try catch捕获多个异常
 *             注意: 此方式在多个catch中捕获的异常如果存在父类子类关系,则必须把父类异常写在子类的后面!!!
 *      方式三:统一处理所有的异常,要求JDK>=7.0
 *
 * 异常处理原则: 一般情况下建议积极处理,但是某些情况下为了统一处理不同方法中的异常时,可以通过消极处理来统一解决问题.
 *
 * 细节: 方法重写,抛出的异常,子类重写的方法不能是比父类更高级别的异常!!!
 *
 * @author Administrator
 * @date 2022/3/30 15:52
 */
public class ExceptionDemo2 {
    public static void main(String[] args) {
        methdod1();

        /**
         * 结论:
         * 1.运行时异常和非运行时异常都支持积极处理,进行try catch,区别在于
         * 运行时异常不需要强制来处理,因为编码谨慎可以完全避免!
         * 而非运行时异常需要强制来处理,编程避免不了的情况要强制处理
         */
        int[] arr = null;
        try{
            System.out.println(arr[0]);
        }catch (NullPointerException e){
            System.out.println("数组为空...");
        }
    }

    public static void methdod1() {
        /*try {
            methdod2();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            methdod3();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            methdod4();
        } catch (IOException e) {
            e.printStackTrace();
        }*/

        /*try {
            methdod2();
            methdod3();
            methdod4();
        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("文件加载失败...");
        } catch (InterruptedException e) {
            //e.printStackTrace();
            System.out.println("睡眠打断...");
        } catch (ClassNotFoundException e) {
            //e.printStackTrace();
            System.out.println("类没找到...");
        }*/

        try {
            methdod2();
            methdod3();
            methdod4();
        } catch (Throwable e) {//7.0之前的写法,虽然可以统一处理,但是不能详细报告异常的类型
            System.out.println("统一处理所有异常...");
        }

        try {
            methdod2();
            methdod3();
            methdod4();
        } catch (IOException | InterruptedException | ClassNotFoundException e) {
            System.out.println("统一处理所有异常...");
        }
    }

    public static void methdod2() throws IOException {
        List<String> lines = Files.readAllLines(Path.of(""));
    }

    public static void methdod3() throws IOException, InterruptedException {
        List<String> lines = Files.readAllLines(Path.of(""));
        Thread.sleep(1000);
    }

    public static void methdod4() throws ClassNotFoundException {
        Class.forName("");
    }
}